package ar.com.larreta.controlador.server;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.springframework.util.FileCopyUtils;

import ar.com.larreta.procesos.AdministradorDeArchivosDescargados;
import ar.com.larreta.procesos.ArchivoDescargable;

public class DescargarArchivo extends HttpServlet {

	/** The Constant log. */
	private static final Logger log = Logger.getLogger(DescargarArchivo.class);
	
	public static final String CONTENT_DISPOSITION = "Content-Disposition";
	public static final String ATTACHMENT_FILENAME = "inline; filename=";
	public static final String GENERADO = "generado";
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		descargar(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		descargar(req, resp);
	}
	
	protected void descargar(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		log.debug("Iniciando descarga");
		try {
			String claveArchivGenerado = req.getParameter(GENERADO);
			ArchivoDescargable archivoDescargable = AdministradorDeArchivosDescargados.getInstancia().get(claveArchivGenerado);
			
			resp.setContentType(archivoDescargable.getContentType());
			resp.setContentLength(archivoDescargable.getOutputStream().size());
			resp.setHeader(CONTENT_DISPOSITION, ATTACHMENT_FILENAME + archivoDescargable.getNombre() );
	
			FileCopyUtils.copy(archivoDescargable.getOutputStream().toByteArray(), resp.getOutputStream());
		} catch (Exception e){
			log.error("Ocurrio un error descargando", e);
		}
		log.debug("Finalizando descarga");
	}
	

}
